/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.orientesalud.dao.impl;

import cl.orientesalud.dao.Dao;
import cl.orientesalud.dao.MedicoDao;
import cl.orientesalud.dominio.Medico;
import cl.orientesalud.util.OrienteLog;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author nicolas
 */
public class MedicoDaoImpl extends Dao implements MedicoDao{
    Logger logger=OrienteLog.obtenerLogger(MedicoDaoImpl.class);
    @Override
    public Medico obtenerMedico(Medico medico) throws Exception  {        
       logger.debug("obteniendo medico:"+medico);
       Medico retorno = null;
       PreparedStatement pstmt=null;
       ResultSet rs=null;
       String consulta="SELECT med_rut,"
               + "med_nombre,"
               + "med_appat,"
               + "med_apmat "			
               + "from medico "
               + "where med_rut=?";
       logger.debug("consulta:"+consulta);
        try {
            pstmt=conexion.preparedStatement(consulta);
            pstmt.setString(1, medico.getRut());
            rs=pstmt.executeQuery();
            if(rs.next()){
                retorno=new Medico();
                retorno.setRut(rs.getString("med_rut"));
                retorno.setNombre(rs.getString("med_nombre"));
                retorno.setApellidoPaterno(rs.getString("med_appat"));
                retorno.setApellidoMaterno(rs.getString("med_apmat"));
            }
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
        return retorno;
    }

    @Override
    public List<Medico> obtenerMedicos() throws Exception {
        List<Medico> medicos=null;
        PreparedStatement pstmt=null;
        Medico medico;
       ResultSet rs=null;
       String consulta="SELECT med_rut,"
               + "      med_nombre,"
               + "      med_appat,"
               + "      med_apmat "               
               + "from medico ";
        try {
            pstmt = conexion.preparedStatement(consulta);
            rs=pstmt.executeQuery();
            medicos=new ArrayList();
            while(rs.next()){
                medico=new Medico();
                medico.setRut(rs.getString("med_rut"));
                medico.setNombre(rs.getString("med_nombre"));
                medico.setApellidoPaterno(rs.getString("med_appat"));
                medico.setApellidoMaterno(rs.getString("med_apmat"));
                
                logger.debug(medico);
                medicos.add(medico);
            }
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
       
        return medicos;
    }

    @Override
    public void actualizarMedico(Medico medico) throws Exception {
        logger.debug("Actualizando medico:"+medico);
        PreparedStatement pstmt=null;
        String update="UPDATE MEDICO SET med_nombre=?,"
                                        + "med_appat=?,"
                                        + "med_apmat=?"                                        
                        + "where med_rut=?";
        try {
            pstmt = conexion.preparedStatement(update);           
            pstmt.setString(1, medico.getNombre());
            pstmt.setString(2, medico.getApellidoPaterno());
            pstmt.setString(3, medico.getApellidoMaterno());       
             pstmt.setString(4, medico.getRut());
            pstmt.executeUpdate();
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
    }
    @Override
    public void commit(){
        super.commit();
    }
   

    @Override
    public void insertarMedico(Medico medico) throws Exception {
        logger.debug("Insertando medico:"+medico);
        PreparedStatement pstmt=null;
        String insert="INSERT INTO MEDICO(med_rut,"
                                   + "      med_nombre,"
                                   + "      med_appat,"
                                   + "      med_apmat) "
                              + "VALUES(?,?,?,?)";
        try {
            pstmt = conexion.preparedStatement(insert);
            pstmt.setString(1, medico.getRut());
            pstmt.setString(2, medico.getNombre());
            pstmt.setString(3, medico.getApellidoPaterno());
            pstmt.setString(4, medico.getApellidoMaterno());       
            pstmt.executeUpdate();
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
    }

    
    public void rollbak() {
        super.rollback();
    }

    
    
}
